/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.bc;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.tesoreria.be.GeneracionCuotas;

/**
 *
 * @author Gilmar
 */
@Stateless
public class GeneracionCuotasFacade implements GeneracionCuotasFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public void create(GeneracionCuotas generacionCuotas) {
        em.persist(generacionCuotas);
    }

    public void edit(GeneracionCuotas generacionCuotas) {
        em.merge(generacionCuotas);
    }

    public void remove(GeneracionCuotas generacionCuotas) {
        em.remove(em.merge(generacionCuotas));
    }

    public GeneracionCuotas find(Object id) {
        try {
            return em.find(GeneracionCuotas.class, id);
        } catch (Exception e) {
            return null;
        }
    }

    public List<GeneracionCuotas> findAll() {
        try {
            return em.createQuery("select object(o) from GeneracionCuotas as o").getResultList();
        } catch (Exception e) {
            return new ArrayList();
        }
    }

    public void generacionCuotas(Date fechaInicio, Date fechaFin) {
        try {
            Query q = em.createNativeQuery("Call generacionMasivaCuotas(?1,?2);");
            q.setParameter(1, fechaInicio,TemporalType.TIMESTAMP);
            q.setParameter(2, fechaFin,TemporalType.TIMESTAMP);
            q.executeUpdate();
        } catch (Exception e) {
            System.out.println("Error" + e.getMessage());
        }
    }

    public void generacionIndividualCuotas(Date fechaInicio, Date fechaFin, Long codigocolegiado) {
        try {
            Query q = em.createNativeQuery("Call generacionIndividualCuotas(?1,?2,?3);");
            q.setParameter(1, fechaInicio,TemporalType.TIMESTAMP);
            q.setParameter(2, fechaFin,TemporalType.TIMESTAMP);
            q.setParameter(3, codigocolegiado);
            q.executeUpdate();
        } catch (Exception e) {
            System.out.println("Error" + e.getMessage());
        }
    }    

    public void actualizacionCuotas(String codigoCI,Date fechaIni,Date FechaFin,Double montoOrdinario,Double montoVitalicio) {
        try {
            Calendar calIni = Calendar.getInstance();
            calIni.setTime(fechaIni);
            calIni.set(Calendar.DAY_OF_MONTH, 1);

            Calendar calFin = Calendar.getInstance();
            calFin.setTime(FechaFin);
            calFin.set(Calendar.DAY_OF_MONTH, calFin.getActualMaximum(Calendar.DAY_OF_MONTH));

            Query q = em.createNativeQuery("Call actualizacionCuotas(?1,?2,?3,?4,?5);");
            q.setParameter(1, codigoCI);
            q.setParameter(2, calIni.getTime(),TemporalType.TIMESTAMP);
            q.setParameter(3, calFin.getTime(),TemporalType.TIMESTAMP);
            q.setParameter(4, montoOrdinario);
            q.setParameter(5, montoVitalicio);
            q.executeUpdate();
        } catch (Exception e) {
            ControladorAbstracto.error(e.getMessage());
        }
    }

    public void actualizacionHabilidad() {
        try {
            Query q = em.createNativeQuery("Call actualizacionHabilidad();");
            q.executeUpdate();
        } catch (Exception e) {
            System.out.println("Error" + e.getMessage());
        }
    }
}
